type token =
  | Tmn
  | Tbn
  | Tdn
  | Tfeatures
  | Ttable
  | Ttree
  | Tint of (int)
  | Tfloat of (float)
  | Tcond of (bool * int * int)
  | Tvar of (int * int)
  | Tvarindex of (int)
  | Tlbrace
  | Trbrace
  | Tlparen
  | Trparen
  | TEOL
  | EOF

open Parsing;;
let _ = parse_error;;
# 2 "cnParser.mly"
(* Ocamlyacc header *)
open Printf
open CnParseTypes
open Mn.Factor.MP

let pline = ref 2 

let parse_error s =
  print_string "Parse error: ";
  print_endline s;
  printf "Line %d\n" !pline;
  flush stdout;;
# 36 "cnParser.ml"
let yytransl_const = [|
  257 (* Tmn *);
  258 (* Tbn *);
  259 (* Tdn *);
  260 (* Tfeatures *);
  261 (* Ttable *);
  262 (* Ttree *);
  268 (* Tlbrace *);
  269 (* Trbrace *);
  270 (* Tlparen *);
  271 (* Trparen *);
  272 (* TEOL *);
    0 (* EOF *);
    0|]

let yytransl_block = [|
  263 (* Tint *);
  264 (* Tfloat *);
  265 (* Tcond *);
  266 (* Tvar *);
  267 (* Tvarindex *);
    0|]

let yylhs = "\255\255\
\002\000\002\000\001\000\001\000\001\000\001\000\004\000\004\000\
\004\000\003\000\003\000\003\000\005\000\005\000\005\000\005\000\
\005\000\006\000\006\000\006\000\006\000\006\000\008\000\008\000\
\008\000\008\000\007\000\007\000\007\000\007\000\009\000\009\000\
\000\000"

let yylen = "\002\000\
\003\000\004\000\003\000\003\000\004\000\004\000\004\000\001\000\
\002\000\001\000\002\000\002\000\003\000\004\000\005\000\003\000\
\001\000\002\000\002\000\001\000\001\000\002\000\002\000\002\000\
\003\000\003\000\001\000\001\000\002\000\005\000\002\000\001\000\
\002\000"

let yydefred = "\000\000\
\000\000\000\000\000\000\000\000\033\000\000\000\000\000\000\000\
\000\000\000\000\008\000\000\000\003\000\000\000\004\000\000\000\
\000\000\009\000\005\000\006\000\000\000\000\000\000\000\000\000\
\000\000\010\000\000\000\000\000\000\000\017\000\000\000\000\000\
\000\000\000\000\000\000\000\000\032\000\023\000\024\000\012\000\
\007\000\011\000\000\000\020\000\000\000\021\000\013\000\000\000\
\016\000\028\000\027\000\000\000\000\000\000\000\026\000\025\000\
\031\000\022\000\019\000\018\000\000\000\029\000\014\000\000\000\
\000\000\015\000\000\000\030\000"

let yydgoto = "\002\000\
\005\000\000\000\028\000\013\000\029\000\047\000\054\000\048\000\
\038\000"

let yysindex = "\004\000\
\048\255\000\000\247\254\025\255\000\000\032\255\013\255\032\255\
\040\255\041\255\000\000\032\255\000\000\032\255\000\000\032\255\
\006\255\000\000\000\000\000\000\042\255\043\255\044\255\022\255\
\030\255\000\000\006\255\032\255\006\255\000\000\001\000\001\000\
\028\255\030\255\030\255\030\255\000\000\000\000\000\000\000\000\
\000\000\000\000\024\255\000\000\001\000\000\000\000\000\001\000\
\000\000\000\000\000\000\047\255\028\255\011\255\000\000\000\000\
\000\000\000\000\000\000\000\000\028\255\000\000\000\000\045\255\
\028\255\000\000\046\255\000\000"

let yyrindex = "\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000"

let yygindex = "\000\000\
\000\000\000\000\020\000\248\255\000\000\226\255\212\255\255\255\
\254\255"

let yytablesize = 273
let yytable = "\015\000\
\046\000\049\000\006\000\018\000\001\000\019\000\007\000\020\000\
\062\000\021\000\022\000\023\000\024\000\025\000\059\000\030\000\
\065\000\060\000\026\000\041\000\067\000\027\000\039\000\063\000\
\014\000\030\000\064\000\030\000\034\000\035\000\036\000\055\000\
\056\000\057\000\050\000\051\000\008\000\037\000\036\000\058\000\
\009\000\052\000\010\000\053\000\011\000\037\000\040\000\012\000\
\042\000\003\000\004\000\016\000\017\000\031\000\032\000\033\000\
\061\000\066\000\000\000\000\000\068\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\043\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\
\025\000\000\000\000\000\000\000\000\000\044\000\000\000\000\000\
\045\000"

let yycheck = "\008\000\
\000\000\032\000\012\001\012\000\001\000\014\000\016\001\016\000\
\053\000\004\001\005\001\006\001\007\001\008\001\045\000\017\000\
\061\000\048\000\013\001\028\000\065\000\016\001\025\000\013\001\
\012\001\027\000\016\001\029\000\007\001\008\001\009\001\034\000\
\035\000\036\000\007\001\008\001\012\001\016\001\009\001\016\001\
\016\001\014\001\011\001\016\001\013\001\016\001\027\000\016\001\
\029\000\002\001\003\001\012\001\012\001\012\001\012\001\012\001\
\010\001\013\001\255\255\255\255\015\001\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\000\001\255\255\255\255\255\255\255\255\255\255\255\255\007\001\
\008\001\255\255\255\255\255\255\255\255\013\001\255\255\255\255\
\016\001"

let yynames_const = "\
  Tmn\000\
  Tbn\000\
  Tdn\000\
  Tfeatures\000\
  Ttable\000\
  Ttree\000\
  Tlbrace\000\
  Trbrace\000\
  Tlparen\000\
  Trparen\000\
  TEOL\000\
  EOF\000\
  "

let yynames_block = "\
  Tint\000\
  Tfloat\000\
  Tcond\000\
  Tvar\000\
  Tvarindex\000\
  "

let yyact = [|
  (fun _ -> failwith "parser")
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'mncontents) in
    Obj.repr(
# 45 "cnParser.mly"
                         ( _3 )
# 220 "cnParser.ml"
               : 'mn))
; (fun __caml_parser_env ->
    let _4 = (Parsing.peek_val __caml_parser_env 0 : 'mncontents) in
    Obj.repr(
# 46 "cnParser.mly"
                              ( pline := !pline + 1; _4 )
# 227 "cnParser.ml"
               : 'mn))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'cncontents) in
    Obj.repr(
# 50 "cnParser.mly"
                         ( (true, _3) )
# 234 "cnParser.ml"
               : CnParseTypes.pcn))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'cncontents) in
    Obj.repr(
# 51 "cnParser.mly"
                         ( (false, _3) )
# 241 "cnParser.ml"
               : CnParseTypes.pcn))
; (fun __caml_parser_env ->
    let _4 = (Parsing.peek_val __caml_parser_env 0 : 'cncontents) in
    Obj.repr(
# 52 "cnParser.mly"
                              ( pline := !pline + 1; (true, _4) )
# 248 "cnParser.ml"
               : CnParseTypes.pcn))
; (fun __caml_parser_env ->
    let _4 = (Parsing.peek_val __caml_parser_env 0 : 'cncontents) in
    Obj.repr(
# 53 "cnParser.mly"
                              ( pline := !pline + 1; (false, _4) )
# 255 "cnParser.ml"
               : CnParseTypes.pcn))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : int) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : 'mncontents) in
    let _4 = (Parsing.peek_val __caml_parser_env 0 : 'cncontents) in
    Obj.repr(
# 57 "cnParser.mly"
                                          ( (_1, _3) :: _4 )
# 264 "cnParser.ml"
               : 'cncontents))
; (fun __caml_parser_env ->
    Obj.repr(
# 58 "cnParser.mly"
          ( [] )
# 270 "cnParser.ml"
               : 'cncontents))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'cncontents) in
    Obj.repr(
# 59 "cnParser.mly"
                  ( pline := !pline + 1; _2 )
# 277 "cnParser.ml"
               : 'cncontents))
; (fun __caml_parser_env ->
    Obj.repr(
# 63 "cnParser.mly"
          ( [] )
# 283 "cnParser.ml"
               : 'mncontents))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'factor) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'mncontents) in
    Obj.repr(
# 64 "cnParser.mly"
                    ( _1 :: _2 )
# 291 "cnParser.ml"
               : 'mncontents))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'mncontents) in
    Obj.repr(
# 65 "cnParser.mly"
                  ( pline := !pline + 1; _2 )
# 298 "cnParser.ml"
               : 'mncontents))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'featurelist) in
    Obj.repr(
# 69 "cnParser.mly"
                                ( PFeatureSet _3 )
# 305 "cnParser.ml"
               : 'factor))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 1 : 'tree) in
    Obj.repr(
# 70 "cnParser.mly"
                                     ( PFeatureTree _3 )
# 312 "cnParser.ml"
               : 'factor))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 2 : 'tree) in
    Obj.repr(
# 71 "cnParser.mly"
                                          ( PFeatureTree _3 )
# 319 "cnParser.ml"
               : 'factor))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'featurelist) in
    Obj.repr(
# 72 "cnParser.mly"
                                ( PFeatureTable _3 )
# 326 "cnParser.ml"
               : 'factor))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'feature) in
    Obj.repr(
# 73 "cnParser.mly"
                                ( PFeature _1 )
# 333 "cnParser.ml"
               : 'factor))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'feature) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'featurelist) in
    Obj.repr(
# 77 "cnParser.mly"
                      ( pline := !pline + 1; _1 :: _2)
# 341 "cnParser.ml"
               : 'featurelist))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'featurelist) in
    Obj.repr(
# 78 "cnParser.mly"
                      ( pline := !pline + 1; _2)
# 348 "cnParser.ml"
               : 'featurelist))
; (fun __caml_parser_env ->
    Obj.repr(
# 79 "cnParser.mly"
          ([])
# 354 "cnParser.ml"
               : 'featurelist))
; (fun __caml_parser_env ->
    Obj.repr(
# 80 "cnParser.mly"
      ([])
# 360 "cnParser.ml"
               : 'featurelist))
; (fun __caml_parser_env ->
    Obj.repr(
# 81 "cnParser.mly"
             ( pline := !pline + 1; [])
# 366 "cnParser.ml"
               : 'featurelist))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : int) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'cond) in
    Obj.repr(
# 85 "cnParser.mly"
            (((-1), float_of_int _1, _2))
# 374 "cnParser.ml"
               : 'feature))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : float) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'cond) in
    Obj.repr(
# 86 "cnParser.mly"
              (((-1), _1, _2))
# 382 "cnParser.ml"
               : 'feature))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : int) in
    let _2 = (Parsing.peek_val __caml_parser_env 1 : float) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'cond) in
    Obj.repr(
# 87 "cnParser.mly"
                   ((_1, _2, _3))
# 391 "cnParser.ml"
               : 'feature))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : int) in
    let _2 = (Parsing.peek_val __caml_parser_env 1 : int) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'cond) in
    Obj.repr(
# 88 "cnParser.mly"
                 ((_1, float_of_int _2, _3))
# 400 "cnParser.ml"
               : 'feature))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : float) in
    Obj.repr(
# 92 "cnParser.mly"
         ( PLeaf _1 )
# 407 "cnParser.ml"
               : 'tree))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : int) in
    Obj.repr(
# 93 "cnParser.mly"
         ( PLeaf (float_of_int _1) )
# 414 "cnParser.ml"
               : 'tree))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tree) in
    Obj.repr(
# 94 "cnParser.mly"
            ( pline := !pline + 1; _2 )
# 421 "cnParser.ml"
               : 'tree))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 3 : int * int) in
    let _3 = (Parsing.peek_val __caml_parser_env 2 : 'tree) in
    let _4 = (Parsing.peek_val __caml_parser_env 1 : 'tree) in
    Obj.repr(
# 96 "cnParser.mly"
    ( PVertex (fst _2, snd _2, _3, _4) )
# 430 "cnParser.ml"
               : 'tree))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : bool * int * int) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'cond) in
    Obj.repr(
# 100 "cnParser.mly"
             (_1 :: _2)
# 438 "cnParser.ml"
               : 'cond))
; (fun __caml_parser_env ->
    Obj.repr(
# 101 "cnParser.mly"
       ( pline := !pline + 1; [])
# 444 "cnParser.ml"
               : 'cond))
(* Entry cn *)
; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
|]
let yytables =
  { Parsing.actions=yyact;
    Parsing.transl_const=yytransl_const;
    Parsing.transl_block=yytransl_block;
    Parsing.lhs=yylhs;
    Parsing.len=yylen;
    Parsing.defred=yydefred;
    Parsing.dgoto=yydgoto;
    Parsing.sindex=yysindex;
    Parsing.rindex=yyrindex;
    Parsing.gindex=yygindex;
    Parsing.tablesize=yytablesize;
    Parsing.table=yytable;
    Parsing.check=yycheck;
    Parsing.error_function=parse_error;
    Parsing.names_const=yynames_const;
    Parsing.names_block=yynames_block }
let cn (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
   (Parsing.yyparse yytables 1 lexfun lexbuf : CnParseTypes.pcn)
;;
